From 030a61a931cef2a9bf756d80e00753dc8c7d621a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 22 Dec 2006 06:19:38 +0000 Subject: [PATCH] Handle bmps with more than 8 bits per channel. (#172584, David Costanzo) 2006-12-22 Matthias Clasen * io-bmp.c (decode_bitmasks): Handle bmps with more than 8 bits per channel. (#172584, David Costanzo) --- gdk-pixbuf/ChangeLog | 4 ++++ gdk-pixbuf/io-bmp.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index 9fb0e1e4c5..81cb1cff79 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,5 +1,9 @@ 2006-12-22 Matthias Clasen + * io-bmp.c (decode_bitmasks): Handle bmps + with more than 8 bits per channel. (#172584, + David Costanzo) + * io-bmp.c: Handle offsets more carefully. (#172188, David Costanzo) diff --git a/gdk-pixbuf/io-bmp.c b/gdk-pixbuf/io-bmp.c index 83e189d6ec..13d9738013 100644 --- a/gdk-pixbuf/io-bmp.c +++ b/gdk-pixbuf/io-bmp.c @@ -605,6 +605,23 @@ decode_bitmasks (guchar *buf, } } + if (State->r_bits > 8) { + State->r_shift += State->r_bits - 8; + State->r_bits = 8; + } + if (State->g_bits > 8) { + State->g_shift += State->g_bits - 8; + State->g_bits = 8; + } + if (State->b_bits > 8) { + State->b_shift += State->b_bits - 8; + State->b_bits = 8; + } + if (State->a_bits > 8) { + State->a_shift += State->a_bits - 8; + State->a_bits = 8; + } + State->read_state = READ_STATE_DATA; State->BufferDone = 0; State->BufferSize = State->LineWidth; -- 2.30.2